Introduction
ShinyApp Link is Here
This project shows interesting findings about the correlation between happiness (rated on a scale from 1-10) and its relationship between various employment sectors in countries around the world.
Our data was supplied from the International Labour Organization, Kaggle, UN, Google Developers, and World Bank
The international Labour Organization website provided us the datasets for Employment by Sector and Status in Employment. Using the data.world query functions, we subset the data from the year 2012 for both of these and joined them together.
Kaggle provided the World Happiness data. This dataset gives a rank by happiness for each country, the region in which the country is in, and a happiness score. The scores are based on the answer to a question asked in the Gallup World Poll. Quoting from Data.World, “This question, known as the Cantril ladder, asks respondents to think of a ladder with the best possible life for them being a 10 and the worst possible life being a 0 and to rate their own current lives on that scale.”
We needed one more categorical variable but could not find any suitable datasets. The UN report on “Country Classification” gave a list of countries determined to be in a category of either: Low Income, Lower Middle Income, Upper Middle Income, High Income. There was not an easily downloadable CSV for this so we created one in Excel. This was not run through an ETL file as there was nothing to clean up as it was only two columns - Country and Income Class. We joined this dataset with the joined employment dataset.
The Google Developers site provided the longitude and latitude data for each country; we then joined this dataset with the previously joined dataset from above.
Finally, to make the data more readable and create a calculated field that calculates the percentage in each sector (Agriculture, Industry, and Service), we had to find the population data for each country. This came form the World Bank website. This dataset was, again, joined with the dataset that has all the other joins.
Our final join was combining the dataset that had all of the above with the World Happiness datset. This was accomplished through an outer join, linking by Country name.
All joins were completed in data.world, with one exception. We joined the World Happiness dataset with the large conglomeration above in Tableau as well.
Below we display our sessionInfo().
sessionInfo()
The Data
Cleaning Up World Happiness Dataset
This data was not difficult to clean up and remained largey untouched.
source("../01 Data/R_ETL_World_Happiness.R")
Cleaning Up Joined Employment Dataset This dataset also did not require a lot of cleaning; the joining and subsetting happened in Data.World. There were no commas, strange column headings, etc.
source("../01 Data/R_ETL_GET_status_sector_2012.R")
The Visualizations
Scatterplot
Tableau Version
Shiny Version
These visualizations shows that as GDP increases, so does happiness. We also get an indication of the trend of each region in happiness; for example, Australia and New Zealand have a pretty horizontal line. As only two countries are involved, it shows that the disaparity between the two is not high; GDP and Happiness are quite similar for Australia and New Zealand. We also see clustering of countries in the Sub-Saharan Africa region with low happiness scores and low GDPs. Western Europe is on the opposite end of this spectrum with high happiness scores and high GDPs, though there is a fairly large disparity between the happiest country in Europe and the least happy based on the trend line.
Boxplot
Tableau Version
Shiny Version
These visualizations show that Sub-Saharan Africa has both the largest percentage of people working in the Agriculture sector and the highest variance of those working in this sector. High income regions such as North America, Western Europe, and Australia and New Zealand have the least variance within each group. Also, the sector with the largest percentage of people working within it for these countries is the Services sector with very few working in the Agriculture sector. The Middle East and Africa has large variance within each group.
Barchart
Tableau Version
Shiny Version
The barcharts show us that Sub-Saharan Africa is the least happy within each Income Class. Overall, Australia and New Zealand are the happiest. The line shows us the average happiness score of the region. Latin America and the Caribbean are the happiest for both the Upper Middle Income and Lower Middle Income.
Crosstabs
Tableau Version
Shiny Version
In this visualization, things are a little reversed; as we are averaging the happiness rank, a higher rank means that a country/region is less happy on a whole. Each number is the average happiness of the countries who are in this region and whose main sector it is either industry, agriculture, or services. The sector with the lowest happiness score, on average, are the companies whose largest sector is agriculture. The only region that has a country whose main sector is Industry is the Middle East/North Africa.
Map
Tableau Version
Shiny Version
The maps provide shows that the regions of Africa and parts of the Middle East, Eastern Europe, and SouthEastern Asia are the least happy. Northern Europe, most of South America, and North America are largely happy. In the Shiny app you can hover over each marker to find the country and then select the marker to view the country’s happiness rank and score.
LS0tDQp0aXRsZTogIjxjZW50ZXI+PGI+SGFwcGluZXNzIEFyb3VuZCB0aGUgV29ybGQ8L2I+PC9jZW50ZXI+Ig0KYXV0aG9yOiAiPGNlbnRlcj48Yj5MdSwgQnJhdWNobGUsIEtvbGlua288L2I+PC9jZW50ZXI+Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHNlbGZfY29udGFpbmVkOiBubw0KICAgIHRvYzogeWVzDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB5ZXMNCi0tLQ0KDQojKipJbnRyb2R1Y3Rpb24qKg0KU2hpbnlBcHAgTGluayBpcyBbSGVyZV0oaHR0cHM6Ly9tZWRpb2NyZWRvZy5zaGlueWFwcHMuaW8vRmluYWxBcHAvKQ0KDQpUaGlzIHByb2plY3Qgc2hvd3MgaW50ZXJlc3RpbmcgZmluZGluZ3MgYWJvdXQgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gaGFwcGluZXNzIChyYXRlZCBvbiBhIHNjYWxlIGZyb20gMS0xMCkgYW5kIGl0cyByZWxhdGlvbnNoaXAgYmV0d2VlbiB2YXJpb3VzIGVtcGxveW1lbnQgc2VjdG9ycyBpbiBjb3VudHJpZXMgYXJvdW5kIHRoZSB3b3JsZC4gDQoNCk91ciBkYXRhIHdhcyBzdXBwbGllZCBmcm9tIHRoZSBbSW50ZXJuYXRpb25hbCBMYWJvdXIgT3JnYW5pemF0aW9uXShodHRwOi8vd3d3Lmlsby5vcmcvZ2xvYmFsL3Jlc2VhcmNoL2dsb2JhbC1yZXBvcnRzL2dsb2JhbC1lbXBsb3ltZW50LXRyZW5kcy8yMDE0L1dDTVNfMjM0ODc5L2xhbmctLWVuL2luZGV4Lmh0bSksIFtLYWdnbGVdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vdW5zZHNuL3dvcmxkLWhhcHBpbmVzcyksDQpbVU5dKGh0dHA6Ly93d3cudW4ub3JnL2VuL2RldmVsb3BtZW50L2Rlc2EvcG9saWN5L3dlc3Avd2VzcF9jdXJyZW50LzIwMTR3ZXNwX2NvdW50cnlfY2xhc3NpZmljYXRpb24ucGRmKSwgW0dvb2dsZSBEZXZlbG9wZXJzXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wdWJsaWMtZGF0YS9kb2NzL2Nhbm9uaWNhbC9jb3VudHJpZXNfY3N2KSwgYW5kIFtXb3JsZCBCYW5rXShodHRwOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TUC5QT1AuVE9UTCkNCg0KVGhlIGludGVybmF0aW9uYWwgTGFib3VyIE9yZ2FuaXphdGlvbiB3ZWJzaXRlIHByb3ZpZGVkIHVzIHRoZSBkYXRhc2V0cyBmb3IgRW1wbG95bWVudCBieSBTZWN0b3IgYW5kIFN0YXR1cyBpbiBFbXBsb3ltZW50LiBVc2luZyB0aGUgZGF0YS53b3JsZCBxdWVyeSBmdW5jdGlvbnMsIHdlIHN1YnNldCB0aGUgZGF0YSBmcm9tIHRoZSB5ZWFyIDIwMTIgZm9yIGJvdGggb2YgdGhlc2UgYW5kIGpvaW5lZCB0aGVtIHRvZ2V0aGVyLiANCg0KS2FnZ2xlIHByb3ZpZGVkIHRoZSBXb3JsZCBIYXBwaW5lc3MgZGF0YS4gVGhpcyBkYXRhc2V0IGdpdmVzIGEgcmFuayBieSBoYXBwaW5lc3MgZm9yIGVhY2ggY291bnRyeSwgdGhlIHJlZ2lvbiBpbiB3aGljaCB0aGUgY291bnRyeSBpcyBpbiwgYW5kIGEgaGFwcGluZXNzIHNjb3JlLiBUaGUgc2NvcmVzIGFyZSBiYXNlZCBvbiB0aGUgYW5zd2VyIHRvIGEgcXVlc3Rpb24gYXNrZWQgaW4gdGhlIEdhbGx1cCBXb3JsZCBQb2xsLiBRdW90aW5nIGZyb20gRGF0YS5Xb3JsZCwgIlRoaXMgcXVlc3Rpb24sIGtub3duIGFzIHRoZSBDYW50cmlsIGxhZGRlciwgYXNrcyByZXNwb25kZW50cyB0byB0aGluayBvZiBhIGxhZGRlciB3aXRoIHRoZSBiZXN0IHBvc3NpYmxlIGxpZmUgZm9yIHRoZW0gYmVpbmcgYSAxMCBhbmQgdGhlIHdvcnN0IHBvc3NpYmxlIGxpZmUgYmVpbmcgYSAwIGFuZCB0byByYXRlIHRoZWlyIG93biBjdXJyZW50IGxpdmVzIG9uIHRoYXQgc2NhbGUuIg0KDQpXZSBuZWVkZWQgb25lIG1vcmUgY2F0ZWdvcmljYWwgdmFyaWFibGUgYnV0IGNvdWxkIG5vdCBmaW5kIGFueSBzdWl0YWJsZSBkYXRhc2V0cy4gVGhlIFVOIHJlcG9ydCBvbiAiQ291bnRyeSBDbGFzc2lmaWNhdGlvbiIgZ2F2ZSBhIGxpc3Qgb2YgY291bnRyaWVzIGRldGVybWluZWQgdG8gYmUgaW4gYSBjYXRlZ29yeSBvZiBlaXRoZXI6IExvdyBJbmNvbWUsIExvd2VyIE1pZGRsZSBJbmNvbWUsIFVwcGVyIE1pZGRsZSBJbmNvbWUsIEhpZ2ggSW5jb21lLiBUaGVyZSB3YXMgbm90IGFuIGVhc2lseSBkb3dubG9hZGFibGUgQ1NWIGZvciB0aGlzIHNvIHdlIGNyZWF0ZWQgb25lIGluIEV4Y2VsLiBUaGlzIHdhcyBub3QgcnVuIHRocm91Z2ggYW4gRVRMIGZpbGUgYXMgdGhlcmUgd2FzIG5vdGhpbmcgdG8gY2xlYW4gdXAgYXMgaXQgd2FzIG9ubHkgdHdvIGNvbHVtbnMgLSBDb3VudHJ5IGFuZCBJbmNvbWUgQ2xhc3MuIFdlIGpvaW5lZCB0aGlzIGRhdGFzZXQgd2l0aCB0aGUgam9pbmVkIGVtcGxveW1lbnQgZGF0YXNldC4gDQoNClRoZSBHb29nbGUgRGV2ZWxvcGVycyBzaXRlIHByb3ZpZGVkIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGRhdGEgZm9yIGVhY2ggY291bnRyeTsgd2UgdGhlbiBqb2luZWQgdGhpcyBkYXRhc2V0IHdpdGggdGhlIHByZXZpb3VzbHkgam9pbmVkIGRhdGFzZXQgZnJvbSBhYm92ZS4gDQoNCkZpbmFsbHksIHRvIG1ha2UgdGhlIGRhdGEgbW9yZSByZWFkYWJsZSBhbmQgY3JlYXRlIGEgY2FsY3VsYXRlZCBmaWVsZCB0aGF0IGNhbGN1bGF0ZXMgdGhlIHBlcmNlbnRhZ2UgaW4gZWFjaCBzZWN0b3IgKEFncmljdWx0dXJlLCBJbmR1c3RyeSwgYW5kIFNlcnZpY2UpLCB3ZSBoYWQgdG8gZmluZCB0aGUgcG9wdWxhdGlvbiBkYXRhIGZvciBlYWNoIGNvdW50cnkuIFRoaXMgY2FtZSBmb3JtIHRoZSBXb3JsZCBCYW5rIHdlYnNpdGUuIFRoaXMgZGF0YXNldCB3YXMsIGFnYWluLCBqb2luZWQgd2l0aCB0aGUgZGF0YXNldCB0aGF0IGhhcyBhbGwgdGhlIG90aGVyIGpvaW5zLiANCg0KT3VyIGZpbmFsIGpvaW4gd2FzIGNvbWJpbmluZyB0aGUgZGF0YXNldCB0aGF0IGhhZCBhbGwgb2YgdGhlIGFib3ZlIHdpdGggdGhlIFdvcmxkIEhhcHBpbmVzcyBkYXRzZXQuIFRoaXMgd2FzIGFjY29tcGxpc2hlZCB0aHJvdWdoIGFuIG91dGVyIGpvaW4sIGxpbmtpbmcgYnkgQ291bnRyeSBuYW1lLiANCg0KQWxsIGpvaW5zIHdlcmUgY29tcGxldGVkIGluIGRhdGEud29ybGQsIHdpdGggb25lIGV4Y2VwdGlvbi4gV2Ugam9pbmVkIHRoZSBXb3JsZCBIYXBwaW5lc3MgZGF0YXNldCB3aXRoIHRoZSBsYXJnZSBjb25nbG9tZXJhdGlvbiBhYm92ZSBpbiBUYWJsZWF1IGFzIHdlbGwuIA0KDQpCZWxvdyB3ZSBkaXNwbGF5IG91ciBzZXNzaW9uSW5mbygpLg0KDQpgYGB7ciBzZXNzaW9uSW5mb30NCnNlc3Npb25JbmZvKCkNCmBgYA0KDQojKipUaGUgRGF0YSoqDQoNCg0KKkNsZWFuaW5nIFVwIFdvcmxkIEhhcHBpbmVzcyBEYXRhc2V0Kg0KDQpUaGlzIGRhdGEgd2FzIG5vdCBkaWZmaWN1bHQgdG8gY2xlYW4gdXAgYW5kIHJlbWFpbmVkIGxhcmdleSB1bnRvdWNoZWQuIA0KDQpgYGB7cn0NCnNvdXJjZSgiLi4vMDEgRGF0YS9SX0VUTF9Xb3JsZF9IYXBwaW5lc3MuUiIpDQpgYGANCg0KKkNsZWFuaW5nIFVwIEpvaW5lZCBFbXBsb3ltZW50IERhdGFzZXQqDQpUaGlzIGRhdGFzZXQgYWxzbyBkaWQgbm90IHJlcXVpcmUgYSBsb3Qgb2YgY2xlYW5pbmc7IHRoZSBqb2luaW5nIGFuZCBzdWJzZXR0aW5nIGhhcHBlbmVkIGluIERhdGEuV29ybGQuIFRoZXJlIHdlcmUgbm8gY29tbWFzLCBzdHJhbmdlIGNvbHVtbiBoZWFkaW5ncywgZXRjLg0KYGBge3J9DQpzb3VyY2UoIi4uLzAxIERhdGEvUl9FVExfR0VUX3N0YXR1c19zZWN0b3JfMjAxMi5SIikNCmBgYA0KDQoNCg0KIyoqVGhlIFZpc3VhbGl6YXRpb25zKioNCiMjKlNjYXR0ZXJwbG90Kg0KPGI+VGFibGVhdSBWZXJzaW9uPC9iPg0KPGNlbnRlcj4hW3ZpczFdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1NjYXR0ZXJwbG90LnBuZyk8L2NlbnRlcj4NCjxiPlNoaW55IFZlcnNpb248L2I+DQo8Y2VudGVyPiFbdmlzMl0oLi4vMDMgVmlzdWFsaXphdGlvbnMvU2NhdHRlcnBsb3RfU2hpbnkucG5nKTwvY2VudGVyPg0KVGhlc2UgdmlzdWFsaXphdGlvbnMgc2hvd3MgdGhhdCBhcyBHRFAgaW5jcmVhc2VzLCBzbyBkb2VzIGhhcHBpbmVzcy4gV2UgYWxzbyBnZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgdHJlbmQgb2YgZWFjaCByZWdpb24gaW4gaGFwcGluZXNzOyBmb3IgZXhhbXBsZSwgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbGFuZCBoYXZlIGEgcHJldHR5IGhvcml6b250YWwgbGluZS4gQXMgb25seSB0d28gY291bnRyaWVzIGFyZSBpbnZvbHZlZCwgaXQgc2hvd3MgdGhhdCB0aGUgZGlzYXBhcml0eSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IGhpZ2g7IEdEUCBhbmQgSGFwcGluZXNzIGFyZSBxdWl0ZSBzaW1pbGFyIGZvciBBdXN0cmFsaWEgYW5kIE5ldyBaZWFsYW5kLiBXZSBhbHNvIHNlZSBjbHVzdGVyaW5nIG9mIGNvdW50cmllcyBpbiB0aGUgU3ViLVNhaGFyYW4gQWZyaWNhIHJlZ2lvbiB3aXRoIGxvdyBoYXBwaW5lc3Mgc2NvcmVzIGFuZCBsb3cgR0RQcy4gV2VzdGVybiBFdXJvcGUgaXMgb24gdGhlIG9wcG9zaXRlIGVuZCBvZiB0aGlzIHNwZWN0cnVtIHdpdGggaGlnaCBoYXBwaW5lc3Mgc2NvcmVzIGFuZCBoaWdoIEdEUHMsIHRob3VnaCB0aGVyZSBpcyBhIGZhaXJseSBsYXJnZSBkaXNwYXJpdHkgYmV0d2VlbiB0aGUgaGFwcGllc3QgY291bnRyeSBpbiBFdXJvcGUgYW5kIHRoZSBsZWFzdCBoYXBweSBiYXNlZCBvbiB0aGUgdHJlbmQgbGluZS4gDQoNCg0KIyMqQm94cGxvdCoNCjxiPlRhYmxlYXUgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMzXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Cb3hwbG90LnBuZyk8L2NlbnRlcj4NCjxiPlNoaW55IFZlcnNpb248L2I+DQo8Y2VudGVyPiFbdmlzMV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvQm94cGxvdF9TaGlueS5wbmcpPC9jZW50ZXI+DQoNClRoZXNlIHZpc3VhbGl6YXRpb25zIHNob3cgdGhhdCBTdWItU2FoYXJhbiBBZnJpY2EgIGhhcyBib3RoIHRoZSBsYXJnZXN0IHBlcmNlbnRhZ2Ugb2YgcGVvcGxlIHdvcmtpbmcgaW4gdGhlIEFncmljdWx0dXJlIHNlY3RvciBhbmQgdGhlIGhpZ2hlc3QgdmFyaWFuY2Ugb2YgdGhvc2Ugd29ya2luZyBpbiB0aGlzIHNlY3Rvci4gSGlnaCBpbmNvbWUgcmVnaW9ucyBzdWNoIGFzIE5vcnRoIEFtZXJpY2EsIFdlc3Rlcm4gRXVyb3BlLCBhbmQgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbGFuZCBoYXZlIHRoZSBsZWFzdCB2YXJpYW5jZSB3aXRoaW4gZWFjaCBncm91cC4gQWxzbywgdGhlIHNlY3RvciB3aXRoIHRoZSBsYXJnZXN0IHBlcmNlbnRhZ2Ugb2YgcGVvcGxlIHdvcmtpbmcgd2l0aGluIGl0IGZvciB0aGVzZSBjb3VudHJpZXMgaXMgdGhlIFNlcnZpY2VzIHNlY3RvciB3aXRoIHZlcnkgZmV3IHdvcmtpbmcgaW4gdGhlIEFncmljdWx0dXJlIHNlY3Rvci4gVGhlIE1pZGRsZSBFYXN0IGFuZCBBZnJpY2EgaGFzIGxhcmdlIHZhcmlhbmNlIHdpdGhpbiBlYWNoIGdyb3VwLg0KDQojIypCYXJjaGFydCoNCjxiPlRhYmxlYXUgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMzXSguLi8wMyBWaXN1YWxpemF0aW9ucy9iYXJjaGFydDEucG5nKTwvY2VudGVyPg0KPGI+U2hpbnkgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMxXSguLi8wMyBWaXN1YWxpemF0aW9ucy9iYXJjaGFydF9zaGlueS5wbmcpPC9jZW50ZXI+DQoNCg0KVGhlIGJhcmNoYXJ0cyBzaG93IHVzIHRoYXQgU3ViLVNhaGFyYW4gQWZyaWNhIGlzIHRoZSBsZWFzdCBoYXBweSB3aXRoaW4gZWFjaCBJbmNvbWUgQ2xhc3MuIE92ZXJhbGwsIEF1c3RyYWxpYSBhbmQgTmV3IFplYWxhbmQgYXJlIHRoZSBoYXBwaWVzdC4gVGhlIGxpbmUgc2hvd3MgdXMgdGhlIGF2ZXJhZ2UgaGFwcGluZXNzIHNjb3JlIG9mIHRoZSByZWdpb24uIExhdGluIEFtZXJpY2EgYW5kIHRoZSBDYXJpYmJlYW4gYXJlIHRoZSBoYXBwaWVzdCBmb3IgYm90aCB0aGUgVXBwZXIgTWlkZGxlIEluY29tZSBhbmQgTG93ZXIgTWlkZGxlIEluY29tZS4gDQoNCiMjKkNyb3NzdGFicyoNCjxiPlRhYmxlYXUgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMzXSguLi8wMyBWaXN1YWxpemF0aW9ucy9jcm9zc3RhYjIucG5nKTwvY2VudGVyPg0KPGI+U2hpbnkgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMxXSguLi8wMyBWaXN1YWxpemF0aW9ucy9jcm9zc3RiX3NoaW55LnBuZyk8L2NlbnRlcj4NCg0KSW4gdGhpcyB2aXN1YWxpemF0aW9uLCB0aGluZ3MgYXJlIGEgbGl0dGxlIHJldmVyc2VkOyBhcyB3ZSBhcmUgYXZlcmFnaW5nIHRoZSBoYXBwaW5lc3MgcmFuaywgYSBoaWdoZXIgcmFuayBtZWFucyB0aGF0IGEgY291bnRyeS9yZWdpb24gaXMgbGVzcyBoYXBweSBvbiBhIHdob2xlLiBFYWNoIG51bWJlciBpcyB0aGUgYXZlcmFnZSBoYXBwaW5lc3Mgb2YgdGhlIGNvdW50cmllcyB3aG8gYXJlIGluIHRoaXMgcmVnaW9uIGFuZCB3aG9zZSBtYWluIHNlY3RvciBpdCBpcyBlaXRoZXIgaW5kdXN0cnksIGFncmljdWx0dXJlLCBvciBzZXJ2aWNlcy4gVGhlIHNlY3RvciB3aXRoIHRoZSBsb3dlc3QgaGFwcGluZXNzIHNjb3JlLCBvbiBhdmVyYWdlLCBhcmUgdGhlIGNvbXBhbmllcyB3aG9zZSBsYXJnZXN0IHNlY3RvciBpcyBhZ3JpY3VsdHVyZS4gIFRoZSBvbmx5IHJlZ2lvbiB0aGF0IGhhcyBhIGNvdW50cnkgd2hvc2UgbWFpbiBzZWN0b3IgaXMgSW5kdXN0cnkgaXMgdGhlIE1pZGRsZSBFYXN0L05vcnRoIEFmcmljYS4gDQoNCiMjKk1hcCoNCjxiPlRhYmxlYXUgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMzXSguLi8wMyBWaXN1YWxpemF0aW9ucy9NYXAucG5nKTwvY2VudGVyPg0KPGI+U2hpbnkgVmVyc2lvbjwvYj4NCjxjZW50ZXI+IVt2aXMxXSguLi8wMyBWaXN1YWxpemF0aW9ucy9tYXBfc2hpbnkucG5nKTwvY2VudGVyPg0KDQpUaGUgbWFwcyBwcm92aWRlIHNob3dzIHRoYXQgdGhlIHJlZ2lvbnMgb2YgQWZyaWNhIGFuZCBwYXJ0cyBvZiB0aGUgTWlkZGxlIEVhc3QsIEVhc3Rlcm4gRXVyb3BlLCBhbmQgU291dGhFYXN0ZXJuIEFzaWEgYXJlIHRoZSBsZWFzdCBoYXBweS4gTm9ydGhlcm4gRXVyb3BlLCBtb3N0IG9mIFNvdXRoIEFtZXJpY2EsIGFuZCBOb3J0aCBBbWVyaWNhIGFyZSBsYXJnZWx5IGhhcHB5LiBJbiB0aGUgU2hpbnkgYXBwIHlvdSBjYW4gaG92ZXIgb3ZlciBlYWNoIG1hcmtlciB0byBmaW5kIHRoZSBjb3VudHJ5IGFuZCB0aGVuIHNlbGVjdCB0aGUgbWFya2VyIHRvIHZpZXcgdGhlIGNvdW50cnkncyBoYXBwaW5lc3MgcmFuayBhbmQgc2NvcmUuDQoNCg==